package com.kaifamiao.iterator;

import java.util.Iterator;
import java.util.List;

/**
 * 1、java.lang.Iterable接口的实现类的对象才是可以被迭代的
 * 2、在 Iterable 接口中有一个 iterator() 方法用于返回迭代器(java.util.Iterator)
 * 3、java.util.Iterator 接口中需要关注三个方法:
 *    boolean hasNext()
 *    E next()
 *    void remove()
 */
public class IteratorTest1 {

	public static void main(String[] args) {
		
		// Collection<Integer> c = new ArrayList<>();
		Iterable<Integer> iterable = List.of( 10 , 5 , 20 , 15 );
		System.out.println( iterable.getClass() );
		
		Iterator<Integer> it = iterable.iterator();
		
		while( it.hasNext() ) {
			Integer n = it.next();
			System.out.println( n );
		}
		
		System.out.println( "- - - ".repeat( 5 ) );
		
		for( Iterator<Integer> itor = iterable.iterator(); itor.hasNext() ; ) {
			Integer n = itor.next();
			System.out.println( n );
		}
		
		System.out.println( "- - - ".repeat( 5 ) );
		
		// 当使用 "for-each loop" 语句处理可迭代(Iterable)对象时本质上还是在使用迭代器
		for( Integer n : iterable ) {
			System.out.println( n );
		}

	}

}
